package com.shylock.as.manager.impl;

import com.shylock.as.entity.SmsLog;
import com.shylock.as.manager.intf.AliSmsService;
import com.shylock.as.service.intf.SmsLogService;
import com.shylock.as.util.JedisUtil;
import com.shylock.common.bo.SmsLogBo;
import com.shylock.common.config.RedisKeyConfig;
import com.shylock.common.config.SystemConfig;
import com.shylock.common.util.NumUtils;
import com.shylock.common.util.RUtils;
import com.shylock.common.util.StringUtils;
import com.shylock.common.vo.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class AliSmsServiceImpl implements AliSmsService {
    @Autowired
    private SmsLogService service;
    
    @Override
    public R sendRCode(String phone) {
        //入参校验
        if(StringUtils.regexPhone(phone)){
                //生成验证码
                int code = NumUtils.createNum(SystemConfig.ALI_SMSCODE_LEN);
                //发送验证码
//                if(AliSmsUtils.sendRegisterCode(phone,code)){
            if(true){
                System.out.println(code);
                    //发送成功，保存到Redis，每个验证码发送的时间不一样，需要给每个验证码设置过期时间，所以使用String
                    JedisUtil.addStr(RedisKeyConfig.SMS_RCODE+phone,code+"",RedisKeyConfig.SMS_RCODE_TIME);
                    //记录数据到数据库
                    service.save(new SmsLog(phone,SystemConfig.SMS_TYPE_RCODE,"新用户注册，发送验证码",new Date()));
                    
                    return RUtils.ok("验证码发送成功,请查收");
                }
        }
        return RUtils.fail("亲网络异常");
    }

    @Override
    public R checkRCode(SmsLogBo bo) {
        //入参校验
        if(bo!=null){
            //校验手机号
            if(StringUtils.isNotEmpty(bo.getPhone())&&bo.getPhone().matches("^1{1}[3-9]{1}[0-9]{9}$")){
                if(bo.getCode()>0){
                    String key = RedisKeyConfig.SMS_RCODE+bo.getPhone();
                    //校验手机号码是否存在验证码
                    if(JedisUtil.checkKey(key)){
                        //校验验证码
            if(bo.getCode()==Integer.parseInt(JedisUtil.getStr(key))){
                //校验成功，删除验证码，验证码失效
                JedisUtil.delKey(key);
                //记录允许注册的手机号，防止未验证手机号，直接注册
                JedisUtil.addSet(RedisKeyConfig.REGISTER_PHONES,bo.getPhone());
                return RUtils.ok(null);
            }
        }
    }
}
        }
        return RUtils.fail("网络异常");
    }

    @Override
    public R sendLCode(String phone) {
        if(StringUtils.regexPhone(phone)){
            int code = NumUtils.createNum(SystemConfig.ALI_SMSCODE_LEN);
//            if(AliSmsUtils.sendLoginCode(phone,code)){
                if(true){
                    System.out.println(code);
                JedisUtil.addStr(RedisKeyConfig.SMS_LCODE+phone,code+"",RedisKeyConfig.SMS_RCODE_TIME);
                service.save(new SmsLog(phone,SystemConfig.SMS_TYPE_LCODE,"用户手机号登录，发送验证码",new Date()));
                return RUtils.ok("短信已发送，请注意查收");
            }
        }
        return RUtils.fail("手机号码格式不允许");
    }

    @Override
    public R sendFCode(String phone) {
        if(StringUtils.regexPhone(phone)){
            //发送验证码的时候校验是否发送过，如果发送过，不会再次发送
//            if(!JedisUtil.checkSet(RedisKeyConfig.FIND_PHONES,phone)){
            if(true){
                
                //生成验证码
                int code= NumUtils.createNum(SystemConfig.ALI_SMSCODE_LEN);
//                if(AliSmsUtils.sendFindCode(phone,code)){
                    if(true){
                        System.out.println(code);
                    //保存到Jedis
                    JedisUtil.addStr(RedisKeyConfig.SMS_FCODE+phone,code+"",RedisKeyConfig.SMS_RCODE_TIME);
                    //保存到数据库
                    service.save(new SmsLog(phone,SystemConfig.SMS_TYPE_FCODE,"手机号找回密码",new Date()));
                    return RUtils.ok("验证码已发送，请注意查收");
                    
                }
            }
        }
        return RUtils.fail("亲，非法请求");
    }


}
